The present disclosure relates to technology for non-volatile storage.
One type of non-volatile storage is semiconductor memory. For example, non-volatile semiconductor memory is used in solid state drives, mobile computing devices, non-mobile computing devices and other non-volatile memory devices. Typically, a non-volatile memory device has a memory controller which controls access of a host system to non-volatile storage (also referred to as non-volatile memory) in the non-volatile memory device. The host system could be computer system, cellular telephone, server, etc.
The host system and memory controller typically communicate using a logical device interface, which may also be referred to herein as a “memory access protocol.” For example, NVMe (Non-Volatile Memory Express) is a logical device interface that may be used to access non-volatile storage when using a PCIe (Peripheral Computer Interconnect Express) bus between the host system and the non-volatile memory device. There are many other logical device interfaces that can be used between a host system and non-volatile memory device.
Prior to operation of the non-volatile memory device, the memory controller is initialized. The initialization process may establish values in various registers in the non-volatile memory device, as well as create Input/Output (I/O) queues. The I/O queues may include I/O command submission queues, on which the host places I/O commands, such as read and write commands. The I/O queues may include I/O command completion queues, on which the memory controller places responses to the I/O commands that were placed on the I/O command submission queues.
Herein, an I/O command submission queue is a queue on which a host places I/O commands in a non-volatile memory command set. Herein, an I/O command completion queue is a queue on which a non-volatile memory controller places a response to an I/O command. The I/O queues (both command submission queues and command completion queues) may be software queues. A software I/O queue, as the term is defined herein, is an I/O queue that resides in memory. The memory location of a given software I/O queue is not necessarily at a fixed location in the memory throughout the lifetime of the non-volatile memory device. This is in contrast to a hardware queue for which the queue location may be fixed throughout the lifetime of the non-volatile memory device. For example, a hardware queue might be implemented in a pre-established set of registers, in which case the queue location may be fixed throughout the lifetime of the non-volatile memory device.